package data;

import java.util.ArrayList;

/**
 * Beeinhaltet die Ergebnis-Daten eines Interviews. 
 * 
 * @author zenjin
 *
 */
public class Interview {


	DataRecord data;
	
	/**
	 * Ein leeres Interview ist nicht gewünscht.
	 */
	@SuppressWarnings("unused")
	private Interview() {
	}
	
	public Interview( String input, ArrayList<String> datakey ) {
		this.data = new DataRecord();
		for (String key : datakey ) {
			String[] keys = key.split(",");
			String name = keys[0];
			int start = Integer.parseInt( keys[1] );
			int end = Integer.parseInt( keys[2] );	
			System.out.println( name );
			System.out.println( input );
			int value = extractValue( input, start, end);
			DataEntry entry = new DataEntry(name, value);
			this.data.add( entry );
		}
		
	}
	

	
	/**
	 * Extrahiert einen Wert aus einem String innerhalb der angegebenen
	 * Grenzen und liefert ihn als int zurück.
	 * @param line
	 * 			Daten String aus dem der Wert gelesen werden soll. 
	 * @param start
	 * 			Startpunkt des Wertes (Erstes Zeichen einer Zeichenkette = 1 )
	 * @param end
	 * 			Endpunkt des Wertes
	 * @return
	 * 			Gelesener Wert als int
	 */
	private int extractValue( String line, int start, int end ) {
		if ( line.equals("") ){
			System.out.println( "Leere Daten übergeben.");
			return -1;
		}
		
		start--;
		int value = 0;
		char[] source = new char[ end-start ];
		String data;
		line.getChars( start, end, source, 0 );
		data = new String( source );
		data = data.replace(" ", "");
		if( !data.equals( "" )) {
			try {
				value = Integer.valueOf( data );
			} catch ( Exception ex ) {
				System.out.println( 
						"Zahl: |" + data + "| konnte nicht kodiert werden");
			}
		} else {
			value = -1;
		}
		return value;
	}

	public String toString() {
		String out = new String();
		ArrayList<DataEntry> list = data.getEntrys();
		for( DataEntry t : list ) {
			out += t.toString()+"\n";
		}
		
		return out;
	}
	
	public int getComputerNummer() {
		Object obj = data.getValueByName( "pcnr" );
		return (Integer) obj;
	}

	public int getInterviewerNummer() {
		Object obj = data.getValueByName( "interviewer" );
		return (Integer) obj;
	}

	public int getInterviewStatus() {
		Object obj = data.getValueByName( "status" );
		return (Integer) obj;
	}

	public int getTipStatus() {
		Object obj = data.getValueByName( "quote" );
		return (Integer) obj;
	}
	
	public DataRecord getDataRecord() {
		return data;
	}
	
	public int getTimeInSeconds() {
		int h = (Integer) data.getValueByName( "verbrh" );
		int m = (Integer) data.getValueByName( "verbrm" );
		int s = (Integer) data.getValueByName( "verbrs" );
		
		int total = h*3600 + m*60 + s;
		return total;
	}
}
